stylecontext: Use a static style when saved
authorBenjamin Otte <otte@redhat.com>
Sun, 26 Oct 2014 18:38:38 +0000 (19:38 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 7 Jan 2015 13:26:47 +0000 (14:26 +0100)
The only style that is animated is the style of the unsaved primary
node. So there's no need to create animated style objects for the other
ones.

There is a bunch of ugliness in the code currently. Further commits are
expected to fix them.

gtk/gtkcsslookup.c
gtk/gtkcsslookupprivate.h
gtk/gtkstylecontext.c

index 0e2a952a8b116a91f5667c71c648091a334a97cf..0d0920f22e8699a991263957b30de37e74cff9f6 100644 (file)
 
 #include "gtkcsslookupprivate.h"
 
+#include "gtkcssanimatedstyleprivate.h"
+#include "gtkcssstaticstyleprivate.h"
+#include "gtkcssstylepropertyprivate.h"
 #include "gtkcsstypesprivate.h"
 #include "gtkprivatetypebuiltins.h"
-#include "gtkcssstylepropertyprivate.h"
 
 GtkCssLookup *
 _gtk_css_lookup_new (const GtkBitmask *relevant)
@@ -106,15 +108,15 @@ void
 _gtk_css_lookup_resolve (GtkCssLookup            *lookup,
                          GtkStyleProviderPrivate *provider,
                         int                      scale,
-                         GtkCssAnimatedStyle     *style,
+                         GtkCssStyle             *style,
                          GtkCssStyle             *parent_style)
 {
   guint i, n;
 
   g_return_if_fail (lookup != NULL);
   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
-  g_return_if_fail (GTK_IS_CSS_ANIMATED_STYLE (style));
-  g_return_if_fail (parent_style == NULL || GTK_IS_CSS_ANIMATED_STYLE (parent_style));
+  g_return_if_fail (GTK_IS_CSS_STYLE (style));
+  g_return_if_fail (parent_style == NULL || GTK_IS_CSS_STYLE (parent_style));
 
   n = _gtk_css_style_property_get_n_properties ();
 
@@ -122,13 +124,24 @@ _gtk_css_lookup_resolve (GtkCssLookup            *lookup,
     {
       if (lookup->values[i].value ||
           _gtk_bitmask_get (lookup->missing, i))
-        gtk_css_animated_style_compute_value (style,
-                                              provider,
-                                              scale,
-                                              parent_style,
-                                              i,
-                                              lookup->values[i].value,
-                                              lookup->values[i].section);
+        {
+          if (GTK_IS_CSS_ANIMATED_STYLE (style))
+            gtk_css_animated_style_compute_value (GTK_CSS_ANIMATED_STYLE (style),
+                                                  provider,
+                                                  scale,
+                                                  parent_style,
+                                                  i,
+                                                  lookup->values[i].value,
+                                                  lookup->values[i].section);
+          else
+            gtk_css_static_style_compute_value (GTK_CSS_STATIC_STYLE (style),
+                                                provider,
+                                                scale,
+                                                parent_style,
+                                                i,
+                                                lookup->values[i].value,
+                                                lookup->values[i].section);
+        }
       /* else not a relevant property */
     }
 }
index 2b53e4ace66737131370d5a1c1b3a4d4cb8d3939..2b0c02105b364217157ef4849d7140c6e87dbf3b 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <glib-object.h>
 #include "gtk/gtkbitmaskprivate.h"
-#include "gtk/gtkcssanimatedstyleprivate.h"
+#include "gtk/gtkcssstyleprivate.h"
 #include "gtk/gtkcsssection.h"
 
 
@@ -51,7 +51,7 @@ void                    _gtk_css_lookup_set                     (GtkCssLookup
 void                    _gtk_css_lookup_resolve                 (GtkCssLookup               *lookup,
                                                                  GtkStyleProviderPrivate    *provider,
                                                                 int                         scale,
-                                                                 GtkCssAnimatedStyle        *style,
+                                                                 GtkCssStyle                *style,
                                                                  GtkCssStyle                *parent_style);
 
 static inline const GtkBitmask *
index 479bf14a3afa22ac3bb69fc84443aaf9ab43628e..2b262738d731668d2e71d94f85574e33ad498357 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "gtkstylecontextprivate.h"
 #include "gtkcontainerprivate.h"
+#include "gtkcssanimatedstyleprivate.h"
 #include "gtkcsscolorvalueprivate.h"
 #include "gtkcsscornervalueprivate.h"
 #include "gtkcssenumvalueprivate.h"
@@ -33,6 +34,7 @@
 #include "gtkcssnumbervalueprivate.h"
 #include "gtkcssrgbavalueprivate.h"
 #include "gtkcssshadowsvalueprivate.h"
+#include "gtkcssstaticstyleprivate.h"
 #include "gtkcssstylepropertyprivate.h"
 #include "gtkcsstransformvalueprivate.h"
 #include "gtkdebug.h"
@@ -680,7 +682,7 @@ create_query_path (GtkStyleContext             *context,
 
 static void
 build_properties (GtkStyleContext             *context,
-                  GtkCssStyle        *values,
+                  GtkCssStyle                 *style,
                   const GtkCssNodeDeclaration *decl,
                   const GtkBitmask            *relevant_changes,
                   GtkCssChange                *out_change)
@@ -704,7 +706,7 @@ build_properties (GtkStyleContext             *context,
   _gtk_css_lookup_resolve (lookup, 
                            GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
                           priv->scale,
-                           GTK_CSS_ANIMATED_STYLE (values),
+                           style,
                            priv->parent ? style_values_lookup (priv->parent) : NULL);
 
   _gtk_css_lookup_free (lookup);
@@ -734,11 +736,11 @@ style_values_lookup (GtkStyleContext *context)
       return values;
     }
 
-  values = gtk_css_animated_style_new ();
 
-  style_info_set_values (info, values);
   if (gtk_style_context_is_saved (context))
     {
+<<<<<<< HEAD
+      values = gtk_css_static_style_new ();
       g_hash_table_insert (priv->style_values,
                            gtk_css_node_declaration_ref (info->decl),
                            g_object_ref (values));
@@ -747,11 +749,14 @@ style_values_lookup (GtkStyleContext *context)
     }
   else
     {
+      values = gtk_css_animated_style_new ();
+
       build_properties (context, values, info->decl, NULL, &priv->relevant_changes);
       /* These flags are always relevant */
       priv->relevant_changes |= GTK_CSS_CHANGE_SOURCE;
     }
-
+  
+  style_info_set_values (info, values);
   g_object_unref (values);
 
   return values;
@@ -772,7 +777,7 @@ style_values_lookup_for_state (GtkStyleContext *context,
 
   decl = gtk_css_node_declaration_ref (context->priv->info->decl);
   gtk_css_node_declaration_set_state (&decl, state);
-  values = gtk_css_animated_style_new ();
+  values = gtk_css_static_style_new ();
   build_properties (context, values, decl, NULL, NULL);
   gtk_css_node_declaration_unref (decl);